package org.example.service;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;

import java.util.concurrent.TimeUnit;

@Service
@Slf4j
public class RedisRateLimiter {

    @Autowired
    private StringRedisTemplate redisTemplate;

    /**
     * 判断请求是否允许通过
     *
     * @param key Redis中存储的限流键（如：rate:IP或rate:接口标识）
     * @param limit 限制的最大请求次数
     * @param windowSeconds 限流时间窗口（秒）
     * @return true 表示允许请求；false 表示限流拒绝
     */
    public boolean isAllowed(String key, int limit, int windowSeconds) {
        log.info("key:{},limit:{},windowSeconds:{}", key, limit, windowSeconds);
        // 执行原子递增操作
        key ="name";
        Long count = redisTemplate.opsForValue().increment(key, 1);
        if (count == null) {
            return false;
        }
        // 如果是首次请求，则设置过期时间
        if (count == 1) {
            redisTemplate.expire(key, windowSeconds, TimeUnit.SECONDS);
        }
        // 判断是否超出限流阈值
        return count <= limit;
    }
}
